<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1.JS延迟加载的方式有哪些？（5）
        //一般有六种方式；defer属性、async属性、动态创建dom方式、使用jquery的getScript方法、使用setTimeout延迟方法、让js最后加载。
        
        // 2.前端 JavaScript 中的 ECMAScript、DOM、BOM 的含义；
        //ECMAScript是JavaScript的核心，规定了JS的语法规范
        //文档对象模型（Document Object Model，简称DOM），是 W3C 组织推荐的处理可扩展标记语言（html或者xhtml）的标准编程接口。
        //BOM（Browser Object Model）即浏览器对象模型，它提供了独立于内容而与浏览器窗口进行交互的对象，其核心对象是 window。
        
        // 3.JavaScript 的数据类型有哪些？
        //字符串（String）、数字 (Number)、布尔 (Boolean)、对空（Null）、未定义（Undefined）、Symbol。. 引用数据类型 ：对象 (Object)、数组 (Array)、函数 (Function)。.

        // 4.如何进行数据类型的判断？
        // typeof
        // instanceof 
        // Object.prototype.toString.call()
        // call、apply、bind        

        // 5.null 和 undefined 的区别？什么时候会得到 undefined？
        // undefined
        //     声明变量未加以初始化就会返回undefeated值, 表示空值
        // null
        //     表示空值， 空对象(不存在的对象)
        // null != {}


        // 6.如何理解 null == undefined 返回 true，null === undefined 返回 false？
        // null == undefined
        // 判断值, 两者都是空值
        // null === undefined
        // 判断值和数据类型


        // 7.使用 continue 或 break 终止循环时，两种方式的区别是？
        // continue      
        //     跳出当前符合条件的流程，继续下一个流程  

        // break
        //     终止整个循环(流程)


        // 8.如何判断字符串内是否包含指定字符？
         // indexOf
        // lastIndexOf
        // includes

        // 9.请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；
         // 修改原数组
        //     reverse
        //     splice
        //     push
        //     pop
        //     unshift
        //     shift
        //     sort    

        // 不修改原数组
        //     slice
        //     concat
        //     join    
        //     indexOf
        //     lastIndexOf

        // 10. var、let、const 区别？
        //var 声明是全局作用域或函数作用域，而 let 和 const 是块作用域。

        // 12. 如何在 DOM2 级事件绑定上传递参数？
        //addEventListener(type, callback, boolean)

        // 13. 怎么阻止事件的进一步传播和默认事件？
        // stopPropagation (), preventDefault () 和 return false.

        // 14. 如何添加一个一次性事件？
        // 在html标签绑定事件
        //     <div onclick="执行代码"></div>
        // 在script标签内
        //     node.onclick = function() { 
        //         执行代码; 
        //     }
         
        // 15. 同步和异步的区别?
        // 同步任务指的是，在主线程上排队执行的任务，只有前一个任务执行完毕，才能执行后一个任务；. 异步任务指的是，不进入主线程、而进入"任务队列"（task queue）的任务，只有等主线程任务执行完毕，"任务队列"开始通知主线程，请求执行任务，该任务才会进入主线程执行


        // 16. AJAX是什么？AJAX是如何为页面注入灵魂？
        //执行异步网络请求, 是一种创建动态网页技术
        // 是一种在无需刷新加载整个网页的情况下, 能够更新部分网页内容的技术

        // 17. 开发阶段的 AJAX 跨域有哪些解决方法，jsonp 的原理是什么
        // 1、响应头添加Header允许访问
        // 2、jsonp 只支持get请求不支持post请求
        // 3、httpClient内部转发
        // 4、使用接口网关——nginx、springcloud zuul   (互联网公司常规解决方案)


        // 18. 请描述一下cookies，sessionStorage和localStorage的区别
        // 共同点：都是保存在浏览器端，且同源的。
        // 区别：
        // cookie数据始终在同源的http请求中携带（即使不需要），即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器，仅在本地保存。cookie数据还有路径（path）的概念，可以限制cookie只属于某个路径下。
        // 存储大小限制也不同，cookie数据不能超过4k，同时因为每次http请求都会携带cookie，所以cookie只适合保存很小的数据，如会话标识。sessionStorage和localStorage 虽然也有存储大小的限制，但比cookie大得多，可以达到5M或更大。
        // 数据有效期不同，sessionStorage：仅在当前浏览器窗口关闭前有效，自然也就不可能持久保持；localStorage：始终有效，窗口或浏览器关闭也一直保存，因此用作持久数据；cookie只在设置的cookie过期时间之前一直有效，即使窗口或浏览器关闭。
        // 作用域不同，sessionStorage不在不同的浏览器窗口中共享，即使是同一个页面；localStorage 在所有同源窗口中都是共享的；cookie也是在所有同源窗口中都是共享的。
        // Web Storage 支持事件通知机制，可以将数据更新的通知发送给监听者。
        // Web Storage 的 api 接口使用更方便。


        // 19. 讲一下常见的异步场景，以及传统异步的诟病和解决方案
        // 1. 网络请求，如 ajax请求、图片加载
        // 2. 定时任务，如setTimeout、setInterval


        // 20. 数组如何实现去重？请提供至少2种方法
        // indexOf方法去重
        // 排序方法sort()

        // 21. 讲一下对基本数据类型 和 复杂/引用数据类型的理解？
        // 基本数据类型，指简单的数据段
        // 引用数据类型，由多个值构成的对象

        // 22. this 的指向如何确定？
        // 在全局作用域中，this指向window对象。
        // JS中函数有两种，直接调用的函数称为普通函数，通过new创建对象的函数称为构造函数。

        // 23. 谈谈对垃圾回收机制的认识
        // JavaScript具有自动垃圾收集机制，也就是说，执行环境会负责管理代码在执行环境过程中使用的内存。


        // 24. 什么是回流重绘，如何进行优化？
        // 当render tree中的一部分(或全部)因为元素的规模尺寸，布局，隐藏等改变而需要重新构建。这就称为回流(reflow)。
        // 当render tree中的一些元素需要更新属性，而这些属性只是影响元素的外观，风格，而不会影响布局的，比如background-color。则就叫称为重绘。

        // 25. 请解释什么是事件代理
        // 事件代理的实现原理是利用冒泡和目标元素, 把处理的事件添加到父元素, 等待子元素事件的冒泡, 并且可以通过父元素event.target判断哪个是子元素, 从而做出处理

        // 26. 谈谈你对渐进增强和优雅降级的理解(补充)

//         1.渐进增强(Progressive Enhancement):先针对低版本的浏览器进行构建页面，保证最基本的功能，然后在针对高级浏览器进行效果，交互等改进和追加功能达到更好的用户体验。

//      2.优雅降级(Graceful Degradation):一开始就针对高版本的浏览器构建完整的功能，然后在针对低版本的浏览器进行兼容。


    </script>
</body>

</html>